#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;

typedef long long ll;

const int MOD = (int)1e9;
const int N = 400;

int dp[N][N];
bool used[N][N];

int add(int a, int b)
{
	a += b;
	if (a >= MOD)
		return a - MOD;
	return a;
}

int mult(int a, int b)
{
	ll c = (ll)a * b;
	return c % MOD;
}

string str;

void solve(int l, int r)
{
	if (used[l][r])
		return;
	if (l > r)
	{
		used[l][r] = 1;
		dp[l][r] = 0;
		return;
	}
	if (l == r)
	{
		used[l][r] = 1;
		dp[l][r] = 1;
		return;
	}
	used[l][r] = 1;
	for (int i = l + 1; i <= r; i++)
	{
		if (str[l] == str[i])
		{
			solve(l + 1, i - 1);
			solve(i, r);
			dp[l][r] = add(dp[l][r], mult(dp[l + 1][i - 1], dp[i][r]));
		}
	}
}

int main()
{
//	freopen ("input.txt", "r", stdin);
//	freopen ("output.txt", "w", stdout);
	cin >> str;
	solve(0, (int)str.length() - 1);
	cout << dp[0][(int)str.length() - 1];
	return 0;
}